/**
 * Pangolin IM Server
 * autor:   yiyefangzhou24
 * email:   yiyefangzhou24@qq.com
 * data:    21/10/1
 */

#ifndef PANGOLINSERVER_PACKAGE_H
#define PANGOLINSERVER_PACKAGE_H
/* 协议版本 */
#define  PACKAGE_VERSION 1
/* 定义包头长度 */
#define PACKAGE_HEAD_LEN 16

/* 定义最大封包长度 */
#define PACKAGE_BUFF_MAX_LEN 2048

/* 定义封包命令 */
#define COM_HEARTBEAT           1
#define COM_MESSAGE             100
#define COM_RE_MESSAGE          101
#define COM_OFF_MESSAGE         102
#define COM_RE_OFF_MESSAGE      103
//#define COM_GROUP_MESSAGE       110
#define COM_REGISTER            200
#define COM_RE_REGISTER         201
#define COM_LOGIN               202
#define COM_RE_LOGIN            203
#define COM_FINDFRIEND          204
#define COM_RE_FINDFRIEND       205
#define COM_LOGOUT              206
#define COM_RE_LOGOUT           207
#define COM_REPASS              208
#define COM_RE_REPASS           209
#define COM_OPERATEFRIEND       210
#define COM_RE_OPERATEFRIEND    211
#define COM_CONFIRMFRIEND       212
#define COM_RE_CONFIRMFRIEND    213
#define COM_DELFRIEND           214
#define COM_RE_DELFRIEND        215
#define COM_FRIENDLIST          216
#define COM_RE_FRIENDLIST       217
#define COM_USERINFO            218
#define COM_RE_USERINFO         219

#define CLI_MESSAGE             800
#define CLI_OPERATEFRIEND       801
#define CLI_CONFIRMFRIEND       802
#define CLI_DELFRIEND           803
//#define SYS_NOTICE              900

/* 定义一些命令对应的类型 */
#define MSG_TYPE_TEXT      1
#define MSG_TYPE_IMAGE     2
/**
 定义包头结构体，包头总长度16Byte
 */
typedef struct {
    int package_len;    //包长度 	4Byte
    short head_len;	    //包头长度 	2Byte
    short version; 	    //协议版本	2Byte
    int command;	    //命令说明	4Byte
    int idx;		    //包序列号	4Byte
} PACKAGE_HEAD;


/* 构造包头输出字符串
* @command  包操作指令
* @out      输出包头内容
*/
void package_head_new(int command,char *out);

/* 构造完整包输出字符串
* @context  包体内容
* @len      包体字节数
* @idx      包序号
* @command  包操作指令
* @out      输出完整包内容
*/
void package_new(char *context,int len,int idx,int command, char *out);

/* 从字符串获取包头信息
* @head     包头结构体
* @data     输入字符串
*/
void get_package_head(PACKAGE_HEAD * head,char * data);

#endif //PANGOLINSERVER_PACKAGE_H
